package cn.lzj.ymcc.exception;

import cn.lzj.ymcc.enums.CommonEorrorCode;
import cn.lzj.ymcc.enums.GlobalErrorCode;
import cn.lzj.ymcc.result.JSONResult;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**--------------------------------------------------------
全局异常处理
 @RestControllerAdvice ：贴在类上，这个类就可以在controller的方法执行前，或者执行后做一些事情
 --------------------------------------------------------**/

//@ControllerAdvice
@RestControllerAdvice
public class GlobleExceptionHandler {
    //拦截异常 : 这个注解就可以拦截器 GlobleException 异常
    /**
     * 只要是后台报错，一律都会走这个方法
     * @param e
     * @return
     */
    @ExceptionHandler(GlobleException.class)
    public JSONResult globleException(GlobleException e){
        e.printStackTrace();
        return JSONResult.error(GlobalErrorCode.YMCC_SYSTEM_ERROR.getMessage(),
                                GlobalErrorCode.YMCC_SYSTEM_ERROR.getCode());
    }
    //拦截器其他异常
    /**
     * 除了后端500报错，其他所有错误都走这个方法---除500报错外
     * @param e
     * @return
     */
    @ExceptionHandler(Exception.class)
    public JSONResult exception(Exception e){
        e.printStackTrace();
        //    YMCC_SERVER_STATE_ERROR("50000","服务繁忙！！请稍后重试！！");
        return JSONResult.error(CommonEorrorCode.YMCC_SERVER_STATE_ERROR);
    }
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public JSONResult MethodArgumentNotValidexception(MethodArgumentNotValidException e){
        e.printStackTrace();
        e.getBindingResult().getAllErrors().forEach(error->{

        });
        return JSONResult.error(CommonEorrorCode.YMCC_SERVER_STATE_ERROR);
    }
}